package com.watson.minio.springminio.file.util;

import com.itextpdf.text.*;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;

/**
 * @Description: TODO
 * @Author watson
 * @Date 2022/7/25 10:07
 * @Version 1.0
 */
public class PDFUtils {
    /**
     * 设置字体
     *
     * @param size  字体大小
     * @param style 字体样式
     * @return
     */
    public static Font createFont(int size, int style) {
        Font font = null;
        try {
            BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
            font = new Font(bfChinese, size, style);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return font;
    }

    /**
     * 设置字体
     *
     * @param name     字体名称
     * @param encoding 编码
     * @param embedded
     * @param size     字体大小
     * @param style    字体样式
     * @return
     */
    public static Font createFont(String name, String encoding, boolean embedded, int size, int style) {
        Font font = null;
        try {
            BaseFont bfChinese = BaseFont.createFont(name, encoding, embedded);
            font = new Font(bfChinese, size, style);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return font;
    }

    /**
     * 创建cell，水平垂直样式
     *
     * @param value    内容
     * @param font     字体样式
     * @param verAlign 垂直样式
     * @param horAlign 水平样式
     * @return
     */
    public static PdfPCell createCell(String value, Font font, int verAlign, int horAlign, BaseColor background, BaseColor border) {
        PdfPCell cell = new PdfPCell();
        cell.setVerticalAlignment(verAlign);
        cell.setHorizontalAlignment(horAlign);
        cell.setPhrase(new Phrase(value, font));
        cell.setVerticalAlignment(1);
        cell.setHorizontalAlignment(1);
        //背景颜色
        cell.setBackgroundColor(background);
        // 边框颜色
        cell.setBorderColor(border);
        return cell;
    }

    /**
     * 创建cell，水平垂直样式
     *
     * @param value    内容
     * @param font     字体样式
     * @param verAlign 垂直样式
     * @param horAlign 水平样式
     * @return
     */
    public static PdfPCell createCell(String value, Font font, int verAlign, int horAlign, BaseColor border) {
        PdfPCell cell = new PdfPCell();
        cell.setVerticalAlignment(verAlign);
        cell.setHorizontalAlignment(horAlign);
        cell.setPhrase(new Phrase(value, font));
        // 边框颜色
        cell.setBorderColor(border);
        return cell;
    }

    /**
     * 创建cell，水平垂直样式
     *
     * @param value    内容
     * @param font     字体样式
     * @param verAlign 垂直样式
     * @param horAlign 水平样式
     * @return
     */
    public static PdfPCell createCell(String value, Font font, int verAlign, int horAlign) {
        PdfPCell cell = new PdfPCell();
        cell.setVerticalAlignment(verAlign);
        cell.setHorizontalAlignment(horAlign);
        cell.setPhrase(new Phrase(value, font));
        return cell;
    }

    /**
     * 创建cell,合并单元格
     *
     * @param value    内容
     * @param font     字体样式
     * @param verAlign 垂直样式
     * @param horAlign 水平样式
     * @param colspan  和并列数
     * @return
     */
    public static PdfPCell createCell(String value, Font font, int verAlign, int horAlign, int colspan) {
        PdfPCell cell = new PdfPCell();
        cell.setVerticalAlignment(verAlign);
        cell.setHorizontalAlignment(horAlign);
        cell.setColspan(colspan);
        cell.setPhrase(new Phrase(value, font));
        return cell;
    }

    /**
     * 创建表格
     *
     * @param colNumber 列数
     * @return
     */
    public static PdfPTable createTable(int colNumber, int totalWidth, int style) {
        PdfPTable table = new PdfPTable(colNumber);
        try {
            table.setTotalWidth(totalWidth);
            table.setLockedWidth(true);
            //table.setHorizontalAlignment(Element.ALIGN_CENTER);
            table.setHorizontalAlignment(style);
            table.getDefaultCell().setBorder(1);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return table;
    }

    /**
     * 创建表格
     *
     * @param widths 列宽数组
     * @return
     */
    public static PdfPTable createTable(float[] widths, int totalWidth, int style) {
        PdfPTable table = new PdfPTable(widths);
        try {
            table.setTotalWidth(totalWidth);
            table.setLockedWidth(true);
            //table.setHorizontalAlignment(Element.ALIGN_CENTER);
            table.setHorizontalAlignment(style);
            table.getDefaultCell().setBorder(1);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return table;
    }

    /**
     * 创建表格
     *
     * @param colNumber 表格列数
     * @param widths    每列的宽度
     * @return
     */
    public static PdfPTable createTable(int colNumber, float[] widths) {
        PdfPTable table = new PdfPTable(colNumber);
        try {
            table.setWidthPercentage(90.0F);
            table.setWidths(widths);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return table;
    }

    /**
     * 创建表格
     *
     * @param colNumber 表格列数
     * @param widths    每列的宽度
     * @return
     */
    public static PdfPTable createTable(int colNumber, int[] widths) {
        PdfPTable table = new PdfPTable(colNumber);
        try {
            table.setWidthPercentage(90.0F);
            table.setWidths(widths);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return table;
    }

    public static void setDocumentProperty(Document document) {
        try {
            document.addTitle("光伏组件故障诊断报告"); // 标题
            document.addSubject("报告"); // 主题
            document.addKeywords("诊断报告"); // 关键字
            document.addAuthor("lyxx"); // 作者
            document.addCreator("admin"); // 创建者
            document.addProducer(); // 生产者
            document.addCreationDate(); // 创建日期
            //document.addHeader(String name, String content); // addHeader对于PDF文档无效，addHeader仅对html文档有效，用于添加文档的头信息

            document.open();
            document.setPageSize(PageSize.A4);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
